package com.rpss.fichamento.telas;

import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import com.rpss.fichamento.R;
import com.rpss.fichamento.dao.Obras;
import com.rpss.fichamento.dao.RepositorioFichamento;
import com.rpss.fichamento.entidade.Obra;
import com.rpss.fichamento.fachada.FichamentoFachada;

/**
 * Activity que demonstra o cadastro de carros:
 * 
 * - ListActivity: para listar os meses - RepositorioMes para salvar os dados
 * no banco - Carro
 * 
 * @author Regis
 * 
 */
public class VisualizarObras extends ListActivity {
	private static final String CATEGORIA = "fichamento";
	
	protected static final int INSERIR_EDITAR = 1;
	protected static final int BUSCAR = 2;

	private List<Obra> obras;
	
	private FichamentoFachada fachada;

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		
		Log.i(CATEGORIA, "in VisualizarObras 1");		
		fachada = new FichamentoFachada();
		Log.i(CATEGORIA, "in VisualizarObras 2");
		atualizarLista();
		Log.i(CATEGORIA, "in VisualizarObras 3");
		ListView lv = getListView();
		lv.setOnItemLongClickListener( new AdapterView.OnItemLongClickListener(){
			@Override
			public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
				onLongListItemClick(v,pos,id);
				return false;
			}
		}); 
	}

	protected void atualizarLista() {
		// Pega a lista de meses e exibe na tela
		obras = fachada.recuperarObras();

		// Adaptador de lista customizado para cada linha de um mes
		setListAdapter(new ObraListAdapter(this, obras));
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(0, INSERIR_EDITAR, 0, "Inserir Novo").setIcon(R.drawable.novo);
		menu.add(0, BUSCAR, 0, "Buscar").setIcon(R.drawable.pesquisar);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// Clicou no menu
		switch (item.getItemId()) {
		case INSERIR_EDITAR:
			// Abre a tela com o formulario para adicionar
			startActivityForResult(new Intent(this, EditarObra.class), INSERIR_EDITAR);
			//Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
			break;
		case BUSCAR:
			// Abre a tela para buscar o mes pelo mes
			startActivity(new Intent(this, BuscarObra.class));
			//Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
			break;
		}
		return true;
	}

	@Override
	protected void onListItemClick(ListView l, View v, int posicao, long id) {
		super.onListItemClick(l, v, posicao, id);
		editarObra(posicao);
	}
	
	private void onLongListItemClick(View v, int posicao, long id) {
        // TODO Auto-generated method stub
    	Log.i(CATEGORIA, "in onLongClick");
        String str=Integer.toString(posicao);
        Log.i(CATEGORIA, "long click : " +str);
    }

	// Recupera o id do mes, e abre a tela de edicao
	protected void editarObra(int posicao) {
		// Usuario clicou em algum mes da lista
		// Recupera o carro selecionado
		Obra obra = obras.get(posicao);
		// Cria a intent para abrir a tela de editar
		Intent it = new Intent(this, EditarObra.class);
		// Passa o id do mes como parametro
		it.putExtra(Obras._ID, obra.id);
		// Abre a tela de edicao
		startActivityForResult(it, INSERIR_EDITAR);
	}

	@Override
	protected void onActivityResult(int codigo, int codigoRetorno, Intent it) {
		super.onActivityResult(codigo, codigoRetorno, it);

		// Quando a activity EditarMes retornar, seja se foi para adicionar vamos atualizar a lista
		if (codigoRetorno == RESULT_OK) {
			// atualiza a lista na tela
			atualizarLista();
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();

		// Fecha o banco
		RepositorioFichamento.fechar();
	}
}